Synkronointi (ohjelmointi)

Tämä artikkeli käsittelee tietotekniikan ja ohjelmoinnin käsitettä synkronoinnista. Tietoliikenteen ja signaalinkäsittelyn synkronointi ovat eri käsitteitä.

Synkronointi (engl. synchronization) tietokoneen ohjelmoinnissa tarkoittaa hallittua synkronointimekanismia rinnakkaisten ohjelmien välisen jaetun tiedon käsittelyyn.[1]

Synkronointia tarvitaan, jotta kahden rinnakkain samanaikaisesti tapahtuvan muutoksen välillä ei synny kilpatilannetta (engl. race condition), jolloin ohjelmat voivat päivittää yhtä aikaa samaa muuttujaa tai tietorakennetta, mikä yleensä johtaa virheeseen. Tämän takia käyttöjärjestelmä tarjoaa mekanismeja resurssien hallittuun synkronointiin (engl. synchronization).

Kilpatilanne voi syntyä myös yhden suorittimen järjestelmässä riippuen säikeiden ja prosessien vuoronnuksesta (context switch) sekä laitteistokeskeytyksien käsittelystä.[2][3] Synkronoinnilla pyritään välttämään kilpatilanteita, mutta virheellinen synkronointi voi aiheuttaa nälkiintymisen tai lukkiutumisen. Ohjelmakoodin uudelleen käytettävyyttä voi haitata synkronoinnin ja muun ohjelmakoodin välinen keskinäinen riippuvuussuhde.[4]

Nykyisin käytettävät lukottomat synkronointimekanismit välttävät suuren osan aiemmin tunnetuista ongelmista. Lukottomia menetelmiä ovat atomiset operaatiot sekä Read-Copy-Update (RCU) mekanismi.[5][6]

  1. Viittausvirhe: Virheellinen <ref>-elementti; viitettä rtsched ei löytynyt
  2. Viittausvirhe: Virheellinen <ref>-elementti; viitettä ibmsync ei löytynyt
  3. Kernel Synchronization cs.utexas.edu. Viitattu 21.2.2017.
  4. Huang, Yi: Contract-based synchronization of multi-threaded Java programs d.lib.msu.edu. 2011. doi:10.25335/58x3-vr49. Viitattu 5.7.2024. (englanniksi)
  5. Jonathan Corbet: Lockless algorithms for mere mortals lwn.net. 28.7.2020. Viitattu 1.11.2021. (englanniksi)
  6. Paolo Bonzini: An introduction to lockless algorithms lwn.net. 19.2.2021. Viitattu 1.11.2021. (englanniksi)

© MMXXIII Rich X Search. We shall prevail. All rights reserved. Rich X Search